๋ณต์กํ ์ปดํฌ๋ํธ์์ ๊ณ ์ ID ๊ด๋ฆฌ๋ฅผ ์ํ React์ experimental_useOpaqueIdentifier๋ฅผ ํ์ํฉ๋๋ค. ์๋ ๋ฐฉ์, ์ด์ ๋ฐ ์ค์ ๊ตฌํ์ ์์๋ณด์ธ์.
React experimental_useOpaqueIdentifier ๋งค๋์ : ID ์์ฑ์ ๋ํ ์ฌ์ธต ๋ถ์
๋์์์ด ์งํํ๋ React ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ปดํฌ๋ํธ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. React์ experimental_useOpaqueIdentifier๋ ์ปดํฌ๋ํธ ๋ด์์ ๊ณ ์ ์๋ณ์(ID)๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ์ง๋ง ์คํ์ ์ธ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ experimental_useOpaqueIdentifier์ ๋ํ ํฌ๊ด์ ์ธ ํ๊ตฌ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ธฐ๋ฅ, ์ด์ ๋ฐ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ์์ธํ ์ดํด๋ด
๋๋ค.
experimental_useOpaqueIdentifier๋ ๋ฌด์์ธ๊ฐ์?
experimental_useOpaqueIdentifier๋ ๊ณ ์ ํ ๋ถํฌ๋ช
์๋ณ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ค๊ณ๋ React Hook์
๋๋ค. ์ด๋ฌํ ์๋ณ์๋ ์ ์ฒด React ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ณ ์ ํจ์ด ๋ณด์ฅ๋๋ฏ๋ก, ํนํ ์ ๊ทผ์ฑ ๋ฐ ์ปดํฌ๋ํธ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ด์์ ์
๋๋ค.
experimental_useOpaqueIdentifier์ ์ฃผ์ ํน์ง:
- ๊ณ ์ ์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๊ณ ์ ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
- ๋ถํฌ๋ช ์ฑ: ์์ฑ๋ ID์ ๋ด๋ถ ๊ตฌ์กฐ๋ ๊ฒ์ฌํ๊ฑฐ๋ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ๋ธ๋๋ฐ์ค๋ก ์ทจ๊ธํ์ธ์.
- Hook ๊ธฐ๋ฐ: React์ Hooks API๋ฅผ ํ์ฉํ์ฌ ํจ์ํ ์ปดํฌ๋ํธ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค.
- ์คํ์ : ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ด Hook์ ์์ง ์คํ์ ์ ๋๋ค. ์ด๋ API๊ฐ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฃผ์ํด์ ์ฌ์ฉํ๊ณ React์ ๋ฐ์ ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ธ์.
์ experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ณ ์ ์๋ณ์์ ํ์์ฑ์ ์ฌ๋ฌ ์๋๋ฆฌ์ค์์ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- ์ ๊ทผ์ฑ (ARIA): ์ ๊ทผ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ๋
aria-labelledby๋ฐaria-describedby์ ๊ฐ์ ARIA ์์ฑ์ ๊ณ ์ ID์ ์์กดํ์ฌ ์์๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ด๋ธ์ ์ ๋ ฅ์ ID๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ช ํ๋ ์ ๋ ฅ ์์๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค. - ์ปดํฌ๋ํธ ์ํ ๊ด๋ฆฌ: ๋ณต์กํ ์ปดํฌ๋ํธ์์๋ ํน์ ๋ด๋ถ ์์์ ๋ฐ์ดํฐ ๋๋ ์ํ๋ฅผ ์ฐ๊ฒฐํด์ผ ํ ์ ์์ต๋๋ค. ๊ณ ์ ID๋ ์ด๋ฌํ ์ฐ๊ฒฐ์ ์ถ์ ํ๋ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์๋ฒ ์ปดํฌ๋ํธ: ์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ ์ ์๋ ์๋ฒ์์ ์์ฑ๋ ID๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ์์ ID๊ฐ ํญ์ ๊ณ ์ ํ๋๋ก ๋ณด์ฅํ๊ณ ํ์ด๋๋ ์ด์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ด๋ฆ ์ถฉ๋ ๋ฐฉ์ง: ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ์ปดํฌ๋ํธ์ ๊ธฐ์ฌํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ด๋ฆ ์ถฉ๋์ ์ํ์ด ์ฆ๊ฐํฉ๋๋ค.
experimental_useOpaqueIdentifier๋ ๊ณ ์ ID๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ค์ ์ง์ค์์ ์์ ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ด ์ํ์ ์ ๊ฑฐํฉ๋๋ค.
์์: ARIA๋ฅผ ์ฌ์ฉํ ์ ๊ทผ์ฑ
์ฐ๊ฒฐ๋ ๋ ์ด๋ธ์ด ์๋ ์ฌ์ฉ์ ์ ์ ์
๋ ฅ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import React from 'react';
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function CustomInput(props) {
const id = useOpaqueIdentifier();
return (
<div>
<label htmlFor={id}>{props.label}</label>
<input type="text" id={id} {...props} />
</div>
);
}
export default CustomInput;
์ด ์์์์ useOpaqueIdentifier()๋ ๊ณ ์ ID๋ฅผ ์์ฑํฉ๋๋ค. ์ด ID๋ ๋ ์ด๋ธ์ htmlFor ์์ฑ๊ณผ ์
๋ ฅ์ id ์์ฑ์ผ๋ก ์ฌ์ฉ๋์ด ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๊ธฐํ ๋ณด์กฐ ๊ธฐ์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ง๋ญ๋๋ค.
experimental_useOpaqueIdentifier๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. ๋ค์์ ํ๋ก์ธ์ค์ ๋ํ ๊ฐ์์
๋๋ค.
- Hook ๊ฐ์ ธ์ค๊ธฐ:
'react'ํจํค์ง์์experimental_useOpaqueIdentifier๋ฅผ ๊ฐ์ ธ์ต๋๋ค. - Hook ํธ์ถ: ํจ์ํ ์ปดํฌ๋ํธ ๋ด์์
useOpaqueIdentifier()๋ฅผ ํธ์ถํฉ๋๋ค. - ID ์ฌ์ฉ: ๋ฐํ๋ ID๋ฅผ ํ์ํ ๋๋ก ์ฌ์ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก HTML ์์์
id์์ฑ์ ์ค์ ํ๊ฑฐ๋ ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํค๋ก ์ฌ์ฉํฉ๋๋ค.
์์ธ ์์
๊ฐ ํญ๋ชฉ์ ๊ณ ์ ID๊ฐ ์๋ ํญ๋ชฉ ๋ชฉ๋ก์ ํฌํจํ๋ ๋ณด๋ค ํฌ๊ด์ ์ธ ์์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
import React from 'react';
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function Item(props) {
const id = useOpaqueIdentifier();
return <li id={id}>{props.children}</li>;
}
function ItemList(props) {
return (
<ul>
{props.items.map((item, index) => (
<Item key={index}>{item}</Item>
))}
</ul>
);
}
function App() {
const items = ['Apple', 'Banana', 'Cherry'];
return <ItemList items={items} />;
}
export default App;
์ด ์์์์ ๊ฐ <Item> ์ปดํฌ๋ํธ๋ ์์ฒด ๊ณ ์ ID๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๋ชฉ๋ก ํญ๋ชฉ์ ๊ณ ์ ํ ID๊ฐ ์์ด ์คํ์ผ๋ง, ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋๋ ์ ๊ทผ์ฑ ๋ชฉ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
experimental_useOpaqueIdentifier๋ ๊ณ ์ ID๋ฅผ ์์ฑํ๋ ํธ๋ฆฌํ ์๋ฃจ์
์ ์ ๊ณตํ์ง๋ง, ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์คํ์ ์ํ: API๊ฐ ์คํ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์์ ์ธ์งํ์ญ์์ค. ํ๋ก์ ํธ์ ์ํ ํ๊ฐ์ ์ด๋ฅผ ๋ฐ์ํ์ญ์์ค.
- ๋ถํฌ๋ช ์ฑ: ์์ฑ๋ ID๋ฅผ ๋ถํฌ๋ช ํ ๊ฐ์ผ๋ก ์ทจ๊ธํ์ญ์์ค. ๋ด๋ถ ๊ตฌ์กฐ์์ ํ์๋๊ฑฐ๋ ๊ตฌ๋ฌธ ๋ถ์์ ์๋ํ์ง ๋ง์ญ์์ค. ๊ณ ์ ์ฑ๋ง์ ์ ๋ขฐํ์ญ์์ค.
- ์ฑ๋ฅ: ์ฑ๋ฅ ์ค๋ฒํค๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์ํ ์ ์์ง๋ง, ๋งค์ฐ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ปดํฌ๋ํธ์์ ๊ณผ๋ํ ID ์์ฑ์ ์ผ๋์ ๋์ญ์์ค. ํ์ํ ๊ฒฝ์ฐ ๋ฉ๋ชจ์ด์ ์ด์ ๋๋ ๊ธฐํ ์ต์ ํ ๊ธฐ์ ์ ๊ณ ๋ คํ์ญ์์ค.
- ํ์ด๋๋ ์ด์
๋ถ์ผ์น (์๋ฒ ์ธก ๋ ๋๋ง): ์๋ฒ ์ธก ๋ ๋๋ง(SSR)์ ์ฌ์ฉํ ๋ ์๋ฒ์์ ์์ฑ๋ ID๊ฐ ๋ก๋ ํ ํด๋ผ์ด์ธํธ ์ธก React ์ฝ๋๋ก ์์ฑ๋ HTML๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค.
experimental_useOpaqueIdentifier๋ SSR ์๋๋ฆฌ์ค์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. - ๋์:
experimental_useOpaqueIdentifier๋ฅผ ์ฑํํ๊ธฐ ์ ์ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ปดํฌ๋ํธ ๋ฒ์ ๋ด์์ ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ์๋ฃจ์ ์ผ๋ก ์ถฉ๋ถํ์ง ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ๊ทธ๋ฌ๋ ํนํ ๋์ ์ปดํฌ๋ํธ ๋ ๋๋ง ๋๋ ์๋ฒ ์ธก ๋ ๋๋ง์ ๋ค๋ฃฐ ๋ ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ํ๊ณ๋ฅผ ์ธ์งํ์ญ์์ค.
SSR (์๋ฒ ์ธก ๋ ๋๋ง) ๋ฐ experimental_useOpaqueIdentifier
React ์ ํ๋ฆฌ์ผ์ด์
, ํนํ Next.js ๋๋ Remix์ ๊ฐ์ ํ๋ ์์ํฌ์ SSR์ ํตํฉํ ๋ ํ์ด๋๋ ์ด์
์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด experimental_useOpaqueIdentifier์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ํ์ด๋๋ ์ด์
์ค๋ฅ๋ ์๋ฒ์์ ์ด๊ธฐ HTML์ด ๋ก๋ ํ ํด๋ผ์ด์ธํธ ์ธก React ์ฝ๋๋ก ์์ฑ๋ HTML๊ณผ ๋ค๋ฅผ ๋ ๋ฐ์ํฉ๋๋ค. ์ด ์ฐจ์ด๋ ์๊ฐ์ ๋ถ์ผ์น์ ์๊ธฐ์น ์์ ๋์์ ์ ๋ฐํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์ข ์ข ID ๋ถ์ผ์น๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ์์ ID๊ฐ ๋ค๋ฅด๊ฒ ์์ฑ๋๋ฉด React๋ ๋ถ์ผ์น๋ฅผ ๊ฐ์งํ๊ณ ์ด๋ฅผ ์กฐ์ ํ๋ ค๊ณ ์๋ํ์ฌ ์ฑ๋ฅ ๋ฌธ์ ๋๋ ์๊ฐ์ ๊ฒฐํจ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
์์: Next.js๋ฅผ ์ฌ์ฉํ SSR
๋ค์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ๋ ๋๋ง๋๋ Next.js ์ปดํฌ๋ํธ์์ experimental_useOpaqueIdentifier๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์์
๋๋ค.
// components/MyComponent.js
import React from 'react';
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function MyComponent() {
const id = useOpaqueIdentifier();
return (
<div id={id}>
<p>This is my component.</p>
</div>
);
}
export default MyComponent;
// pages/index.js
import MyComponent from '../components/MyComponent';
function HomePage() {
return (
<div>
<h1>Welcome to my page!</h1>
<MyComponent />
</div>
);
}
export default HomePage;
MyComponent ๋ด์์ ์ง์ experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ Next.js๊ฐ ํ์ด๋๋ ์ด์
์ค์ ID๋ฅผ ์กฐ์ ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. React Hook ์ธ๋ถ์์ ๋ค๋ฅธ ID ์์ฑ ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋ฒ ๋๋ ํด๋ผ์ด์ธํธ์์๋ง Hook์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค์ํ ๊ฒ์ SSR์ ๊ฒฝ์ฐ ์ ๋๋ก ์๋ํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋์์ ์คํ๋์ด์ผ ํ๋ค๋ ์ ์
๋๋ค.
SSR ๋ฐ ID๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ์ผ๊ด๋ ID ์์ฑ: ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ID ์์ฑ ๋ก์ง์ด ๋์ผํ์ง ํ์ธํ์ญ์์ค.
experimental_useOpaqueIdentifier๋ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. - ๋ฌด์์ ID ํผํ๊ธฐ: ID๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋์ ์์ฑ๊ธฐ ๋๋ ๊ธฐํ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ด๋ ๊ฑฐ์ ํ์คํ๊ฒ ํ์ด๋๋ ์ด์ ์ค๋ฅ๋ฅผ ์ ๋ฐํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ์๋ฒ ๋ ๋๋ง ๋ฐ ํด๋ผ์ด์ธํธ ๋ ๋๋ง ํ๊ฒฝ ๋ชจ๋์์ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ์ฌ ID์ ๊ด๋ จ๋ ํ์ด๋๋ ์ด์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค.
- React์ ํ์ด๋๋ ์ด์ ๊ฒฝ๊ณ ์ฌ์ฉ: ๋ธ๋ผ์ฐ์ ์ฝ์์ ํ์๋๋ React์ ํ์ด๋๋ ์ด์ ๊ฒฝ๊ณ ์ ์ฃผ์ํ์ญ์์ค. ์ด๋ฌํ ๊ฒฝ๊ณ ๋ ์ข ์ข ID ๋ถ์ผ์น ๋๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ HTML ๊ฐ์ ๊ธฐํ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ํ๋ ๋๋ค.
experimental_useOpaqueIdentifier์ ๋ํ ๋์
experimental_useOpaqueIdentifier๋ ๊ณ ์ ID๋ฅผ ์์ฑํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ํน์ ์๊ตฌ ์ฌํญ ๋ฐ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ณ ๋ คํ ์ ์๋ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค.
- ์ฆ๊ฐํ๋ ์นด์ดํฐ: ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ ์ปดํฌ๋ํธ ๋ฒ์ ๋ด์์ ์นด์ดํฐ๋ฅผ ์ ์งํ๊ณ ์ ID๊ฐ ํ์ํ ๋๋ง๋ค ์ฆ๊ฐ์ํค๋ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ID ์๊ฐ ๋ฏธ๋ฆฌ ์๋ ค์ ธ ์๊ณ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ ์ ์๋ ๊ฐ๋จํ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๊ฑฐ๋ ID๊ฐ ์กฐ๊ฑด๋ถ๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
- UUID ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
uuid์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ์ฉ ๊ณ ์ ์๋ณ์(UUID)๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. UUID๋ ์๋ก ๋ค๋ฅธ ์์คํ ๋ฐ ํ๊ฒฝ์์๋ ์ถฉ๋ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ฎ์ต๋๋ค. ๊ทธ๋ฌ๋ UUID๋ ์ผ๋ฐ์ ์ผ๋กexperimental_useOpaqueIdentifier๊ฐ ์์ฑํ๋ ID๋ณด๋ค ๊ธธ๊ณ ๋ณต์กํ๋ฏ๋ก ์ผ๋ถ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋๋ ์ ์ฅ ํจ์จ์ฑ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. - ์ปจํ ์คํธ ๊ธฐ๋ฐ ID ์์ฑ: React ์ปจํ ์คํธ๋ฅผ ๋ง๋ค์ด ์ ์ญ ID ์นด์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ์ ์ด๋๊ณ ์ค์ ์ง์ค์์ผ๋ก ๊ณ ์ ID๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ง์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ํ์ํ๋ฉฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ ๋ณต์กํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ Hook: ์์ฒด ์ฌ์ฉ์ ์ ์ Hook์ ๋ง๋ค์ด ๊ณ ์ ID๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ID ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๋ณด๋ค ์ฒ ์ ํ๊ฒ ์ ์ดํ๊ณ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
๋น๊ต ํ ์ด๋ธ
| ์ ๊ทผ ๋ฐฉ์ | ์ฅ์ | ๋จ์ | ์ฌ์ฉ ์ฌ๋ก |
|---|---|---|---|
experimental_useOpaqueIdentifier |
์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ๊ณ ์ ์ฑ์ด ๋ณด์ฅ๋๋ฉฐ, React์ ์ต์ ํ๋์ด ์์ต๋๋ค. | API๊ฐ ์คํ์ ์ด๋ฏ๋ก ํฅํ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. | ๊ณ ์ ID๊ฐ ํ์ํ ๋๋ถ๋ถ์ React ์ปดํฌ๋ํธ, ํนํ ์ ๊ทผ์ฑ์ ์ํด. |
| ์ฆ๊ฐํ๋ ์นด์ดํฐ | ๊ฐ๋จํ๊ณ ๊ฐ๋ณ์ต๋๋ค. | ๊ณ ์ ์ฑ์ด ๋ณด์ฅ๋์ง ์์ผ๋ฉฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. | ์ ์ ์์ ์ ์ ID๊ฐ ์๋ ๊ฐ๋จํ ์ปดํฌ๋ํธ. |
| UUID ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๊ณ ์ ์ฑ์ด ๋ณด์ฅ๋๊ณ ๋๋ฆฌ ์ง์๋ฉ๋๋ค. | ID๊ฐ ๊ธธ๊ณ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. | ๋ค๋ฅธ ์์คํ ๊ฐ์ ์ ์ญ์ ์ผ๋ก ๊ณ ์ ํ ID๊ฐ ํ์ํ ์๋๋ฆฌ์ค. |
| ์ปจํ ์คํธ ๊ธฐ๋ฐ ID ์์ฑ | ์ค์ ์ง์ค์ ID ๊ด๋ฆฌ, ์ ์ด๋ ๊ณ ์ ์ฑ. | ๋ ๋ณต์กํ ์ค์ , ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ค๋ฒํค๋. | ๋ณต์กํ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ์๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ . |
| ์ฌ์ฉ์ ์ ์ Hook | ์ต๋ ์ ์ด, ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ๋จ. | ๋ ๋ง์ ๋ ธ๋ ฅ, ์ค๋ฅ ๊ฐ๋ฅ์ฑ. | ํน์ ๋ง์ถค ์ค์ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ณ ์ ID ์์ฑ. |
์ ๊ทผ์ฑ์ ๋์ด์ ์ฌ์ฉ ์ฌ๋ก
์ข
์ข
์ ๊ทผ์ฑ ์ด์ ์ผ๋ก ๊ฐ์กฐ๋์ง๋ง, experimental_useOpaqueIdentifier๋ ARIA ์์ฑ์ ๋์ด ํ์ฅ๋ฉ๋๋ค. ๋ค์์ ๋ค๋ฅธ ์ ์ฉ ์ฌ๋ก์
๋๋ค.
- ๋์ ๋ชฉ๋ก์ ๊ณ ์ ํค: React์
keyprop์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง๋ง,experimental_useOpaqueIdentifier๋ ๋ชฉ๋ก ์ฌ์ ๋ ฌ ๋๋ ํํฐ๋ง์ ๋ค๋ฃฐ ๋ ๋ ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ธ ํค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋keyprop์ ์๋๋ ์ฉ๋๋ React๊ฐ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ ๊ฑฐ๋ ํญ๋ชฉ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ค๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค. ์ด๋ฌํ ID๊ฐ ๋ค์ ๋ ๋๋ง๋ ๋ ์์ ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉดkeyprop์ ๋ฌด์์๋ก ์์ฑ๋ ID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ชป๋ ๊ดํ์ ๋๋ค. - ํน์ ์์ ์คํ์ผ๋ง: ์์์ ๊ณ ์ ID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CSS ํด๋์ค ๋๋ ์คํ์ผ์ ๋์ ์ผ๋ก ์ ์ฉํ์ฌ ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ๋ชจ์์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ: ๊ณ ์ ID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํน์ ์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ณต์กํ ์ปดํฌ๋ํธ์์ ์ด๋ฒคํธ๋ฅผ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ ํต์ : ๊ณ ์ ID๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ ๊ฐ์ ํต์ ์ฑ๋๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์ปดํฌ๋ํธ๋ ํน์ ID๋ก ๋ฉ์์ง๋ฅผ ๋ธ๋ก๋์บ์คํธํ ์ ์๊ณ , ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ํด๋น ID๋ฅผ ๊ฐ์ง ๋ฉ์์ง๋ฅผ ์์ ๋๊ธฐํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
experimental_useOpaqueIdentifier๋ ํนํ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ๊ฐ๋ ฅํ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ ๋ React ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ณ ์ ID๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์
๋๋ค. ์คํ์ ์ํ๋ ์ฃผ์๋ฅผ ์ํ์ง๋ง, ์ฌ์ฉ ํธ์์ฑ๊ณผ ๋ณด์ฅ๋ ๊ณ ์ ์ฑ์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ๋งค๋ ฅ์ ์ธ ์ต์
์
๋๋ค. ์ด์ , ํ๊ณ ๋ฐ ๋์์ ์ดํดํ๋ฉด experimental_useOpaqueIdentifier๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ React ์ฝ๋์ ํ์ง๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. React์ ํฅํ ๋ฆด๋ฆฌ์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ์
๋ฐ์ดํธํ๊ณ API๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ญ์์ค. experimental_useOpaqueIdentifier์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์์ฉํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ์์ ์ ์ด๋ฉฐ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ฉด์ฑ
์กฐํญ: ์ด ์ ๋ณด๋ ์ด ์ถํ ๋ ์ง ๊ธฐ์ค์ผ๋ก React ๋ฐ experimental_useOpaqueIdentifier์ ํ์ฌ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. React์ API๋ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ํญ์ ์ต์ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ณต์ React ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.